package models; import java.util.ArrayList; import parameters.Parameters; public class Scheduler { private ArrayList<Server> server; public Scheduler(){ server = new ArrayList<>(); server.add(new Server()); Thread th = new Thread(server.get(0)); th.start(); } public int getMinimumServer(){ int min=Integer.MAX_VALUE; int serverIndex=0; int i=0; for (Server s:server){ if ((s.getWaitingTime()<min)&&(s.getTasks().length<Parameters.clientsLoadperServer)){ min=s.getWaitingTime(); serverIndex=i; } i++; } return serverIndex; } public void dispatchTaskOnServer(Task t){ if ((server.get(server.size()-1).getTasks().length>=Parameters.clientsLoadperServer)&&(server.size()<Parameters.maxNoServers)&&(server.size()<=Parameters.maxNoServers)){ Server s=new Server(); server.add(s); Thread th=new Thread(server.get(server.size()-1)); th.start(); Parameters.noOfOpenServers++; } if (server.get(getMinimumServer()).getTail()!=null){ if (server.get(getMinimumServer()).getTail().getFinishTime()>t.getArrivalTime()) t.setFinishTime(server.get(getMinimumServer()).getTail().getFinishTime()+t.getServiceTime()); else t.setFinishTime(t.getArrivalTime()+t.getServiceTime()); } else{ t.setFinishTime(t.getArrivalTime()+t.getServiceTime()); } server.get(getMinimumServer()).addTask(t); } public ArrayList<Task[]> getCurrentTasks(){ ArrayList<Task[]> currentTasks=new ArrayList<Task[]>(); for (Server s:server){ currentTasks.add(s.getTasks()); } return currentTasks; } public ArrayList<Task[]> getAllTasks(){ ArrayList<Task[]> allTasks=new ArrayList<Task[]>(); for (Server s:server){ allTasks.add(s.getAllTasks()); } return allTasks; } public ArrayList<Server> getServer(){ return server; } public boolean isEmpty(){ boolean queueIsEmpty=false; for (Server s:server){ if (s.getTasks().length!=0){ queueIsEmpty=false; } } return queueIsEmpty; } }